package co.edu.udea.herbario.dto;

/**
 *Clase DTO encargada de almacenar y transportar los datos de los elementos de la tabla
 * Herb_Ejemplares entre la persistencia y la logica de la aplicacion
 *
 * @author Lorena Orozco
 */

public class Ejemplar
{
    private int numero;                         // identificador del ejemplar
    private Familia familia;                    // familia a la cual pertenece el ejemplar
    private Genero genero;                      // genero al cual pertenece el ejemplar
    private Especie especie;                    // especie a la cual pertenece el ejemplar
	private int continente;                     // codigo del continente en el cual se hallo el ejemplar
    private String continenteTexto;
	private int pais;                           // codigo del pais en el cual se hallo el ejemplar
    private String paisTexto;
	private int departamento;                   // codigo del departamento en el cual se hallo el ejemplar
    private String departamentoTexto;
	private int municipio;                      // codigo del municipio en el cual se hallo el ejemplar
    private String municipioTexto;
	private String nombreAutor;                 // nombre de la persona que define la especie
	private String fechaDeterminacion;            // fecha en la que se define la taxonomía del ejemplar
	private String nombreDeterminador;          // nombre de la persona que define la taxonomía del ejemplar
	private String nombreColectorPrincipal;     // nombre de la persona que hallo el ejemplar
	private String numeroColeccion;                // consecutivo asignado al ejemplar por su colector
	private String fechaColeccion;                // fecha en la que se hallo el ejemplar
	private String otrosColectores;             // nombre de los otros colectores del ejemplar
	private String notasCampo;                  // descripcion sobre algunas caracteristicas del ejemplar
	private String porConfirmar;                // indica si la especie del ejemplar esta por confirmar o si esta a fin con otra especie
	private String subespecie;                  // nombre de la subespecie a la cual pertenece el ejemplar
	private String variedad;                    // nombre de la variedad del ejemplar
	private String nombreComun;                 // denominacion popular dada al ejemplar por los pobladores de la region
	private String nombreCientifico;            // es la combinacion del genero + especie + nombreautor
	private String localidad;                   // informacion del lugar al que pertenece el ejemplar
	private int elevacionMinima;             // altura minima en donde se colecto el ejemplar
	private int elevacionMaxima;             // altura maxima en donde se colecto el ejemplar
	private double gradosLatitud;                  // componente en grados de la localizacion del ejemplar en direccion Norte - Sur
	private double minutosLatitud;              // componente en minutos de la localizacion del ejemplar en direccion Norte - Sur
	private double segundosLatitud;             // componente en segundos de la localizacion del ejemplar en direccion Norte - Sur
	private double gradosLongitud;                 // componente en grados de la localizacion del ejemplar en direccion Este - Oeste
	private double minutosLongitud;             // componente en minutos de la localizacion del ejemplar en direccion Este - Oeste
	private double segundosLongitud;            // componente en segundos de la localizacion del ejemplar en direccion Este - Oeste
	private String norteSur;                    // localizacion del ejemplar en direccion norte o sur con respecto al meridiano de Greenwich
	private String esteOeste;                   // localizacion del ejemplar en direccion este u oeste con respecto al meridiano de Greenwich
	private String grupoColeccion;              // indica el grupo de coleccion al cual pertenece el ejemplar
	private String codigoBarra;                 // consecutivo que identifica al ejemplar dentro del herbario
	private String publicarCoordenadas;         // indica si las coordenadas del ejemplar pueden ser publicadas
    private String tieneImagen;                 // indica si el ejemplar contiene imagen
    private double dap;                         // diametro a la altura del pecho dado en centimetros
    private Valorestipo materialTipo;           // especie que sirvio como referencia para definir las caracteristicas del ejemplar
    private Valorestipo habito;                 // forma de crecimiento del ejemplar
    private Valorestipo colorFlor;              // tonalidad de la flor del ejemplar
    private Valorestipo colorFruto;             // tonalidad del fruto del ejemplar
    private Valorestipo estadoReproductivo;     // estado en el cual se encuentra la especie
    private Valorestipo tipoMontaje;            // forma de montaje del ejemplar
    private Valorestipo formaIngreso;           // indica si el ejemplar fue donado o recolectado por el herbario
    private Valorestipo nombreInstitucion;      // lugar de donde proviene el ejemplar para la forma de ingreso

    //datos de distraccion para icefaces
    private String elevacionTexto;
    private String longitudTexto;
    private String latitudTexto;
    private String nombreImagen;

    public String getCodigoBarra() {
        return codigoBarra;
    }

    public void setCodigoBarra(String codigoBarra) {
        this.codigoBarra = codigoBarra;
    }

    public Valorestipo getColorFlor() {
        return colorFlor;
    }

    public void setColorFlor(Valorestipo colorFlor) {
        this.colorFlor = colorFlor;
    }

    public Valorestipo getColorFruto() {
        return colorFruto;
    }

    public void setColorFruto(Valorestipo colorFruto) {
        this.colorFruto = colorFruto;
    }

    public int getContinente() {
        return continente;
    }

    public void setContinente(int continente) {
        this.continente = continente;
    }

    public double getDap() {
        return dap;
    }

    public void setDap(double dap) {
        this.dap = dap;
    }

    public int getDepartamento() {
        return departamento;
    }

    public void setDepartamento(int departamento) {
        this.departamento = departamento;
    }

    public int getElevacionMaxima() {
        return elevacionMaxima;
    }

    public void setElevacionMaxima(int elevacionMaxima) {
        this.elevacionMaxima = elevacionMaxima;
    }

    public int getElevacionMinima() {
        return elevacionMinima;
    }

    public void setElevacionMinima(int elevacionMinima) {
        this.elevacionMinima = elevacionMinima;
    }

    public Especie getEspecie() {
        return especie;
    }

    public void setEspecie(Especie especie) {
        this.especie = especie;
    }

    public Valorestipo getEstadoReproductivo() {
        return estadoReproductivo;
    }

    public void setEstadoReproductivo(Valorestipo estadoReproductivo) {
        this.estadoReproductivo = estadoReproductivo;
    }

    public String getEsteOeste() {
        return esteOeste;
    }

    public void setEsteOeste(String esteOeste) {
        this.esteOeste = esteOeste;
    }

    public Familia getFamilia() {
        return familia;
    }

    public void setFamilia(Familia familia) {
        this.familia = familia;
    }

    public String getFechaColeccion() {
        return fechaColeccion;
    }

    public void setFechaColeccion(String fechaColeccion) {
        this.fechaColeccion = fechaColeccion;
    }

    public String getFechaDeterminacion() {
        return fechaDeterminacion;
    }

    public void setFechaDeterminacion(String fechaDeterminacion) {
        this.fechaDeterminacion = fechaDeterminacion;
    }

    public Valorestipo getFormaIngreso() {
        return formaIngreso;
    }

    public void setFormaIngreso(Valorestipo formaIngreso) {
        this.formaIngreso = formaIngreso;
    }

    public Genero getGenero() {
        return genero;
    }

    public void setGenero(Genero genero) {
        this.genero = genero;
    }

    public double getGradosLatitud() {
        return gradosLatitud;
    }

    public void setGradosLatitud(double gradosLatitud) {
        this.gradosLatitud = gradosLatitud;
    }

    public double getGradosLongitud() {
        return gradosLongitud;
    }

    public void setGradosLongitud(double gradosLongitud) {
        this.gradosLongitud = gradosLongitud;
    }

    public String getGrupoColeccion() {
        return grupoColeccion;
    }

    public void setGrupoColeccion(String grupoColeccion) {
        this.grupoColeccion = grupoColeccion;
    }

    public Valorestipo getHabito() {
        return habito;
    }

    public void setHabito(Valorestipo habito) {
        this.habito = habito;
    }

    public String getLocalidad() {
        return localidad;
    }

    public void setLocalidad(String localidad) {
        this.localidad = localidad;
    }

    public Valorestipo getMaterialTipo() {
        return materialTipo;
    }

    public void setMaterialTipo(Valorestipo materialTipo) {
        this.materialTipo = materialTipo;
    }

    public double getMinutosLatitud() {
        return minutosLatitud;
    }

    public void setMinutosLatitud(double minutosLatitud) {
        this.minutosLatitud = minutosLatitud;
    }

    public double getMinutosLongitud() {
        return minutosLongitud;
    }

    public void setMinutosLongitud(double minutosLongitud) {
        this.minutosLongitud = minutosLongitud;
    }

    public int getMunicipio() {
        return municipio;
    }

    public void setMunicipio(int municipio) {
        this.municipio = municipio;
    }

    public String getNombreAutor() {
        return nombreAutor;
    }

    public void setNombreAutor(String nombreAutor) {
        this.nombreAutor = nombreAutor;
    }

    public String getNombreCientifico() {
        return nombreCientifico;
    }

    public void setNombreCientifico(String nombreCientifico) {
        this.nombreCientifico = nombreCientifico;
    }

    public String getNombreColectorPrincipal() {
        return nombreColectorPrincipal;
    }

    public void setNombreColectorPrincipal(String nombreColectorPrincipal) {
        this.nombreColectorPrincipal = nombreColectorPrincipal;
    }

    public String getNombreComun() {
        return nombreComun;
    }

    public void setNombreComun(String nombreComun) {
        this.nombreComun = nombreComun;
    }

    public String getNombreDeterminador() {
        return nombreDeterminador;
    }

    public void setNombreDeterminador(String nombreDeterminador) {
        this.nombreDeterminador = nombreDeterminador;
    }

    public Valorestipo getNombreInstitucion() {
        return nombreInstitucion;
    }

    public void setNombreInstitucion(Valorestipo nombreInstitucion) {
        this.nombreInstitucion = nombreInstitucion;
    }

    public String getNorteSur() {
        return norteSur;
    }

    public void setNorteSur(String norteSur) {
        this.norteSur = norteSur;
    }

    public String getNotasCampo() {
        return notasCampo;
    }

    public void setNotasCampo(String notasCampo) {
        this.notasCampo = notasCampo;
    }

    public int getNumero() {
        return numero;
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }

    public String getNumeroColeccion() {
        return numeroColeccion;
    }

    public void setNumeroColeccion(String numeroColeccion) {
        this.numeroColeccion = numeroColeccion;
    }

    public String getOtrosColectores() {
        return otrosColectores;
    }

    public void setOtrosColectores(String otrosColectores) {
        this.otrosColectores = otrosColectores;
    }

    public int getPais() {
        return pais;
    }

    public void setPais(int pais) {
        this.pais = pais;
    }

    public String getPorConfirmar() {
        return porConfirmar;
    }

    public void setPorConfirmar(String porConfirmar) {
        this.porConfirmar = porConfirmar;
    }

    public String getPublicarCoordenadas() {
        return publicarCoordenadas;
    }

    public void setPublicarCoordenadas(String publicarCoordenadas) {
        this.publicarCoordenadas = publicarCoordenadas;
    }

    public double getSegundosLatitud() {
        return segundosLatitud;
    }

    public void setSegundosLatitud(double segundosLatitud) {
        this.segundosLatitud = segundosLatitud;
    }

    public double getSegundosLongitud() {
        return segundosLongitud;
    }

    public void setSegundosLongitud(double segundosLongitud) {
        this.segundosLongitud = segundosLongitud;
    }

    public String getSubespecie() {
        return subespecie;
    }

    public void setSubespecie(String subespecie) {
        this.subespecie = subespecie;
    }

    public Valorestipo getTipoMontaje() {
        return tipoMontaje;
    }

    public void setTipoMontaje(Valorestipo tipoMontaje) {
        this.tipoMontaje = tipoMontaje;
    }

    public String getVariedad() {
        return variedad;
    }

    public void setVariedad(String variedad) {
        this.variedad = variedad;
    }

    public String getContinenteTexto() {
        if(continenteTexto == null || "DESCONOCIDO".equals(continenteTexto))
            return "ND";
        return continenteTexto;
    }

    public void setContinenteTexto(String continenteTexto) {
        this.continenteTexto = continenteTexto;
    }

    public String getDepartamentoTexto() {
        if(departamentoTexto == null || "DESCONOCIDO".equals(departamentoTexto))
            return "ND";
        return departamentoTexto;
    }

    public void setDepartamentoTexto(String departamentoTexto) {
        this.departamentoTexto = departamentoTexto;
    }

    public String getMunicipioTexto() {
        if(municipioTexto == null || "DESCONOCIDO".equals(municipioTexto))
            return "ND";
        return municipioTexto;
    }

    public void setMunicipioTexto(String municipioTexto) {
        this.municipioTexto = municipioTexto;
    }

    public String getPaisTexto() {
        if(paisTexto == null || "DESCONOCIDO".equals(paisTexto))
            return "ND";
        return paisTexto;
    }

    public void setPaisTexto(String paisTexto) {
        this.paisTexto = paisTexto;
    }

    public String getElevacionTexto()
    {
        String auxElevacion = "";
        if(elevacionMaxima == 0)
        {auxElevacion = "Max: ND";}
        else
        {auxElevacion = ("" + elevacionMaxima);}
        if(elevacionMinima == 0)
        {auxElevacion += "\nMin: ND";}
        else
        {auxElevacion += ("\nMin: " + elevacionMinima);}

        return auxElevacion;
    }

    public void setElevacionTexto(String elevacionTexto) {
        this.elevacionTexto = elevacionTexto;
    }

    public String getLatitudTexto()
    {
        if(gradosLatitud == 0 && minutosLatitud == 0 && segundosLatitud == 0)
        {return "ND";}
        else
        {
            String lat = "" + gradosLatitud + "°" + minutosLatitud + "\"" + segundosLatitud + "'";
            if(norteSur != null)
            {lat += norteSur;}
            return lat;
        }
    }

    public void setLatitudTexto(String latitudTexto){
        this.latitudTexto = latitudTexto;
    }

    public String getLongitudTexto() 
    {
        if(gradosLongitud == 0 && minutosLongitud == 0 && segundosLongitud == 0)
        {return "ND";}
        else
        {
            String lon = "" + gradosLongitud + "°" + minutosLongitud + "\"" + segundosLongitud + "'";
            if(esteOeste != null)
            {lon += esteOeste;}
            return lon;
        }
    }

    public void setLongitudTexto(String longitudTexto) {
        this.longitudTexto = longitudTexto;
    }

    public String getTieneImagen() {
        return tieneImagen;
    }

    public void setTieneImagen(String tieneImagen) {
        this.tieneImagen = tieneImagen;
    }

    public String getNombreImagen()
    {
        nombreImagen = ""+this.numero;
        if(this.tieneImagen != null)
        {
            if(!this.tieneImagen.equals("S") && !this.tieneImagen.equals("s"))
            {
                nombreImagen = "no_disponible";
            }
        }
        else
        {
            nombreImagen = "no_disponible";
        }
        
        return nombreImagen;
    }

    public void setNombreImagen(String nombreImagen) {
        this.nombreImagen = nombreImagen;
    }


}
